package lambda;

import java.util.Comparator;

/**
 * JDK8之后推出了一个新特性:lambda表达式
 * lambda表达式可以用更简洁的语法创建匿名内部类
 * 注意:使用lambda表达式创建的匿名内部类实现的接口只能有一个抽象方法，否则不能使用。
 *
 * lambda表达式可以更突出核心逻辑，而不再赘述匿名内部类的语法。使得代码更简洁扼要
 * lambda表达式替换接口方法，只要这个接口是函数式的接口FunctionalInterface
 */

public class LambdaDemo1 {
    public static void main(String[] args) {
        //以比较器为例：为整数定义降序使用的比较器
        Comparator<Integer> c = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        };

        //lambda表达式可以忽略接口与定义,标准写法如下：
        //1. 仅保留参数列表和方法体（核心部分)
        Comparator<Integer> c1=(Integer o1, Integer o2)->{
                                    return o2-o1;
                                };
        //不影响阅读，因为前边用Comparator接收，其方法里只有一个抽象方法就是new Comparator
        //说明后边肯定是用来比较大小的

        //2. 参数的类型可以忽略不写
        Comparator<Integer> c2=(o1, o2) -> {
            return o2-o1;
        };

        //3. 如果里边的代码只有一句，方法体的"{}"可以忽略，并且如果这句话有return关键字，也要一同删掉
        Comparator<Integer> c3=(o1, o2) -> o2-o1;
    }
}
